<?php
	require_once("Campo.php");
	
	class Funcion extends Campo{
		var $arrCampos;
		var $arrCadenas;
		var $arrExpresiones;
		var $indiceConcat;
		var $nombreFuncion;
		
		function Funcion($nombre, $funcion, $tabla=0){
			$this->Nombre = $nombre;
			$this->Alias = $nombre;
			$this->esVisible=1;
			$this->ClaveExterna = 0;
			$this->esClavePrimaria = 0;
			$this->indiceConcat = 0;
			$this->Tabla = $tabla;
			$this->nombreFuncion = $funcion;
			$this->ocultoDetalle = 0;
			$this->ocultoListado = 0;
			$this->encriptado = 0;
			$this->esGrupo = 0;
			$this->esBase = 0;
			$this->esReadOnly = 0;
			$this->noIngresar = 0;
			$this->esFuncion = 1;
		}
		
		function agregarCampo($campo){
			$this->arrCampos[$this->indiceConcat] =	$campo;
			$this->indiceConcat++;			
		}
		function agregarTexto($texto){
			$this->arrCadenas[$this->indiceConcat] = $texto;
			$this->indiceConcat++;
		}
		function agregarExpresion($texto){
			$this->arrExpresiones[$this->indiceConcat] = $texto;
			$this->indiceConcat++;
		}
		
		function obtExpresion(){
			$expresion = $this->nombreFuncion."(";
			$coma = "";
			for($i=0; $i<$this->indiceConcat; $i++){
				if(isset($this->arrCampos[$i])){
					$expresion .= $coma . $this->arrCampos[$i]->obtExpresion();
				}
				else if(isset($this->arrCadenas[$i])){
					$expresion .= $coma . "'" .$this->arrCadenas[$i] . "'";
				}
				else if(isset($this->arrExpresiones[$i])){
					$expresion .= $coma .$this->arrExpresiones[$i];
				}
				$coma = ", ";
			}
			$expresion .= ") as '" . $this->Nombre . "'";
			
			return $expresion;
		}
		
		function obtLongitud(){
			$longitud;
			for($i=0; $i<$this->indiceConcat; $i++){
				if(isset($this->arrCampos[$i])){
					$longitud += $this->arrCampos[$i]->obtTabla()->obtPropiedad($this->Nombre, "length");
				}
				else{
					$longitud += strlen($this->arrCadenas[$i]);
				}
			}
			return $longitud;			
		}
		
		function obtTipo(){
			if(!isset($this->Tipo)){
				return "VARCHAR";
			}
			else{
				return $this->Tipo;
			}
		}
		
		function obtEsAutonumerico(){
			return false;
		}
		
		function obtNombreTabla(){
			return $this->arrCampos[0]->NombreTabla;
		}
		function obtAliasTabla(){
			return $this->arrCampos[0]->AliasTabla;
		}
		function obtEsAnulable(){
			return "0";
		}
	}
?>